export default class CustomPalette {
    constructor(bpmnFactory, create, elementFactory, palette, translate) {
        this.bpmnFactory = bpmnFactory;
        this.create = create;
        this.elementFactory = elementFactory;
        this.translate = translate;

        palette.registerProvider(this); // 在类中使用palette.registerProvider(this)指定这是一个palette
    }
    // 这个函数就是绘制palette的核心 
    // getPaletteEntries(element) {}
    // 编写核心函数getPaletteEntries代码 
    // 函数的名称你不能变, 不然会报错, 首先它返回的是一个对象, 对象中指定的就是你要自定义的项, 它大概长成这样:
    getPaletteEntries(element) {
        /*
        可以看到我定义的一项的名称就是: create.lindaidai-task. 它会有几个固定的属性:
        group: 属于哪个分组, 比如tools、event、gateway、activity等等,用于分类
        className: 样式类名, 我们可以通过它给元素修改样式
        title: 鼠标移动到元素上面给出的提示信息
        action: 用户操作时会触发的事件

        */
        const {
            bpmnFactory,
            create,
            elementFactory,
            translate
        } = this;

        function createTask() {
            return function (event) {
                const businessObject = bpmnFactory.create('bpmn:Task'); // 其实这个也可以不要
                const shape = elementFactory.createShape({
                    type: 'bpmn:Task',
                    businessObject
                });
                console.log(shape) // 只在拖动或者点击时触发
                create.start(event, shape);
            }
        }

        return {
            'create.lindaidai-task': {
                group: 'model', // 分组名
                className: 'icon-custom lindaidai-task', // 样式类名
                title: translate('创建一个类型为lindaidai-task的任务节点'),
                action: { // 操作
                    dragstart: createTask(), // 开始拖拽时调用的事件
                    click: createTask() // 点击时调用的事件
                }
            }
        }
    }

}
// 使用$inject注入一些需要的变量
CustomPalette.$inject = [
    'bpmnFactory',
    'create',
    'elementFactory',
    'palette',
    'translate'
]


// function createTask(bpmnFactory, elementFactory, create) {
//     return function (event) {
//         const businessObject = bpmnFactory.create('bpmn:Task');

//         // console.log(businessObject);

//         const shape = elementFactory.createShape({
//             type: 'bpmn:Task',
//             businessObject,
//             // width: 50,
//             // height: 40
//         });
//         // console.log(shape) // 只在拖动或者点击时触发
//         create.start(event, shape);
//     }
// }